"""
用户管理视图函数
功能：实现用户的增删改查
"""
from django.shortcuts import render, redirect
from app.models import Department, UserInfo, PrettyNumber  # 数据表类

from app.utils.form import UserModelForm  # 表单ModelForm类

from app.utils.pagination import Pagination  # 导入分页导航条


def user_list(request):
    """
    用户列表
    """
    queryset = UserInfo.objects.all()

    page_object = Pagination(request, queryset, PAGE_SIZE=10)  # 实例化分页导航条类,每页显示10条记录
    page_queryset = page_object.page_queryset  # 获得分完页的数据结果

    # 生成分页导航条
    page_nav = page_object.html()
    context = {
        'queryset': page_queryset,  # 分完页的数据结果
        'page_nav': page_nav  # 生成的页码导航条
    }
    return render(request, 'user_list.html', context)


def user_add(request):
    """
    添加用户 (原始实现方式)
    缺点：
     1.要重复前端form表单
     2.用户提交数据未校验
     3.前端输入错误没有提示
     4.关联的数据要手动获取，前端要循环渲染
    """
    if request.method == 'GET':
        content = {
            'gender': UserInfo.gender_choices,
            'depart': Department.objects.all()
        }

        return render(request, 'user_add.html', content)

    name = request.POST.get('name')
    password = request.POST.get('password')
    age = request.POST.get('age')
    account = request.POST.get('account')
    create_time = request.POST.get('create_time')
    depart_id = request.POST.get('depart')
    gender = request.POST.get('gender')

    UserInfo.objects.create(name=name, password=password, age=age,
                            account=account, create_time=create_time,
                            depart_id=depart_id, gender=gender)
    return redirect('/user/list')


def user_add_modelform(request):
    """
    添加用户（通过Django ModelForm组件实现 最简便）
    """
    if request.method == 'GET':
        form = UserModelForm()  # 实例化类
        return render(request, 'user_add_modelform.html', {'form': form})

    # POST请求
    form = UserModelForm(data=request.POST)  # 拿到所有提交过来的数据
    if form.is_valid():  # 数据校验

        # 如果你想对数据表中的字段另外再传递值来保存，就用
        # form.instance.字段名 = '值'
        form.instance.password = '0000'  # 默认密码是0000

        form.save()  # 向 model = UserInfo 定义的表保存数据
        return redirect('/user/list/')
    else:
        # form中带了POST过来的请求
        return render(request, 'user_add_modelform.html', {'form': form})


def user_edit_modelform(request, nid):
    """
    用户信息修改
    nid 用于接收前端传递过来的id,他的名字要和urls.py文件中定义的一样
    """
    # 1.先查询到该条记录
    # 2.拿到POST请求过来的数据（data=request.POST），将将查询到数据对象传递给form（instance=row_data）
    row_data = UserInfo.objects.filter(id=nid).first()

    if request.method == 'GET':
        form = UserModelForm(instance=row_data)  # 将查询到的对象传递给form
        return render(request, 'user_edit_modelform.html', {'form': form})

    # POST请求
    form = UserModelForm(data=request.POST, instance=row_data)  # 拿到所有提交过来的数据
    if form.is_valid():  # 数据校验
        form.save()  # 向 model = UserInfo 定义的表保存数据
        return redirect('/user/list/')
    else:
        # form中带了POST过来的请求
        return render(request, 'user_edit_modelform.html', {'form': form})


def user_delete_modelform(request, nid):
    """
    用户信息删除
    nid 用于接收前端传递过来的id,他的名字要和urls.py文件中定义的一样
    """
    UserInfo.objects.filter(id=nid).delete()
    return redirect('/user/list/')
